
// 理解引用
const names = [ '孙悟空' , '猪悟能' , '沙悟净' ];
console.log( names );

names[ 0 ] = '齐天大圣孙悟空';
console.log( names );

// 闭包(Closures):
// 一个函数和对其周围状态的引用捆绑在一起的组合就是闭包
// 其中，函数的周围状态被称作 "词法环境" ( lexical environment )

function welcome( name ){
    console.log( `欢迎${name}` );
    let time = new Date().toLocaleString();

    function show(){
        console.log( `${time} 欢迎 ${name}` );
    }

    show();
}

// 每次调用函数都会导致函数进入 `call stack` (调用栈)
// 当函数开始执行时，JS引擎就会为函数的局部变量分配空间
welcome( '唐三藏' ); 
// 函数执行结束就会从 `call stack` 中弹出，此时与函数有关的局部变量都将被释放


// 再次调用函数依然时按照 `入栈-出栈` 方式处理
welcome( '观世音' );